﻿using Credinka.Ayni.SEA.EN;
using Credinka.Ayni.SEA.RN;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
using Credinka.Ayni.GEN.UTL;
using System.DirectoryServices.AccountManagement;
using System.Text;

public partial class AsociarUsuario : System.Web.UI.Page
{
    private enUsuario oenUsuario;
    private List<enUsuario> loenUsuario;
    private rnUsuario ornUsuario;

    private rnDescripcion ornDescripcion;
    private string codigo = string.Empty;

    #region Métodos

    private void CargarEstado()
    {
        ornDescripcion = new rnDescripcion();
        ddlEstado.DataSource = ornDescripcion.ListarEstado();
        ddlEstado.DataTextField = "Descripcion";
        ddlEstado.DataValueField = "CodigoElemento";
        ddlEstado.DataBind();
    }

    private enUsuario BuscarUsuario(string Username)
    {
        DirectoryContext dc = new DirectoryContext(DirectoryContextType.Domain, Environment.UserDomainName);
        Domain domain = Domain.GetDomain(dc);
        DirectoryEntry de = domain.GetDirectoryEntry();

        DirectorySearcher deSearch = new DirectorySearcher(de);
        deSearch.Filter = "(&(objectClass=user)(objectCategory=person))";
        SearchResultCollection results = deSearch.FindAll();
        loenUsuario = new List<enUsuario>();
        
        foreach (SearchResult objUsuarioDominio in results)
        {
            enUsuario oenUsuarioAdd = new enUsuario();
            oenUsuarioAdd.NombreUsuario = objUsuarioDominio.Properties["sAMAccountName"][0].ToString();
            oenUsuarioAdd.NombreCompleto = objUsuarioDominio.Properties["name"][0].ToString();
            oenUsuarioAdd.AudNombreUsuarioCreacion = objUsuarioDominio.Properties["accountexpires"][0].ToString();
            loenUsuario.Add(oenUsuarioAdd);
        }

        foreach (enUsuario item in loenUsuario)
        {
            if (Username.Equals(item.NombreUsuario.Trim()))
            {
                oenUsuario.IdCargo = 1;
                oenUsuario.CodigoEstadoUsuario = Convert.ToInt32(ddlEstado.SelectedValue);
                oenUsuario.NombreUsuario = item.NombreUsuario;
                oenUsuario.NombreCompleto = item.NombreCompleto.Trim();
                oenUsuario.estado = item.IdCargo.ToString();
                //Enable(de);
            }
        }
        return oenUsuario;
    }

    private void Enable(DirectoryEntry userEntry)
    {
        int val = (int)userEntry.Properties["userAccountControl"].Value;
        userEntry.Properties["userAccountControl"].Value = val & ~0x2;
    }

    private List<enOficina> obtieneOficinasXzonas()
    {
        List<enOficina> lZonas = new List<enOficina>();
        List<enOficina> lenOficina = new List<enOficina>();
        //int IdProductoTasa = Int32.Parse(sIdProductoTasa.ToString());
        rnOficina ornOficina = new rnOficina();
        lZonas = ornOficina.ListarZonas();
        lenOficina = ornOficina.ListarOficinas(0);
        enOficina resultado = new enOficina();
        resultado.lenOficina = new List<enOficina>();

        enOficina resultado2 = new enOficina();
        List<enOficina> final = new List<enOficina>();
        foreach (enOficina oZonas in lZonas)
        {
            resultado = new enOficina();
            resultado.lenOficina = new List<enOficina>();
            resultado.CodigoZona = oZonas.CodigoZona;
            resultado.Zona = oZonas.Zona;
            foreach (enOficina oenOficina in lenOficina)
                if (oZonas.CodigoZona == oenOficina.CodigoZona)
                {
                    resultado2 = new enOficina();
                    resultado2.CodigoZona = oZonas.CodigoZona;
                    resultado2.CodigoOficina = oenOficina.CodigoOficina;
                    resultado2.NombreOficina = oenOficina.NombreOficina;
                    resultado2.IdOficina = oenOficina.IdOficina;
                    resultado2.Tasa = oenOficina.Tasa;
                    resultado2.IdProductoTasaOficina = oenOficina.IdProductoTasaOficina;
                    resultado2.Seleccion = oenOficina.Seleccion;
                    resultado.lenOficina.Add(resultado2);
                }
            final.Add(resultado);
        }
        return final;
    }

    private List<enCargoPerfil> obtienePerfilXCargo()
    {
        List<enCargoPerfil> loenCargo = new List<enCargoPerfil>();
        List<enCargoPerfil> loenPerfil = new List<enCargoPerfil>();
        //int IdProductoTasa = Int32.Parse(sIdProductoTasa.ToString());

        rnCargoPerfil ornOficina = new rnCargoPerfil();
        loenCargo = ornOficina.ListarCargo();
        loenPerfil = ornOficina.ListarPerfil(0);
        enCargoPerfil resultado = new enCargoPerfil();
        resultado.loenCargoPerfil = new List<enCargoPerfil>();

        enCargoPerfil resultado2 = new enCargoPerfil();
        List<enCargoPerfil> final = new List<enCargoPerfil>();
        foreach (enCargoPerfil oCargo in loenCargo)
        {
            resultado = new enCargoPerfil();
            resultado.loenCargoPerfil = new List<enCargoPerfil>();
            resultado.IdCargo = oCargo.IdCargo;
            resultado.Nombre = oCargo.Nombre;
            foreach (enCargoPerfil oenPerfil in loenPerfil)
                if (oCargo.IdCargo == oenPerfil.IdCargo)
                {
                    resultado2 = new enCargoPerfil();
                    resultado2.IdCargoPerfil = oCargo.IdCargoPerfil;
                    resultado2.IdCargo = oCargo.IdCargo;
                    resultado2.IdPerfil = oenPerfil.IdPerfil;
                    resultado2.NombrePerfil = oenPerfil.Nombre;
                    resultado2.Seleccion = oenPerfil.Seleccion;
                    resultado.loenCargoPerfil.Add(resultado2);
                }
            final.Add(resultado);
        }
        return final;
    }

    #endregion

    #region Eventos
    
    protected void Page_Load(object sender, EventArgs e)
    {
        codigo = Page.Request.QueryString.AllKeys.ToList().Count > 0 ? Page.Request.QueryString["codigo"].ToString() : string.Empty;
        if (!Page.IsPostBack)
        {
            if (codigo != string.Empty)
            {
                //CargarPerfilUsuario();
                buscarAD.Enabled = false;
                buscarAD.CssClass = "button2";
                txtUsuario.Disabled = true;
                txtUsuario.Attributes.CssStyle.Value = "txt-box-campos-disabled";
            }
            else
            {
                //Session["listaPerfilAsociar"] = new List<enPerfilUsuario>();
                //List<enPerfilUsuario> lista = new List<enPerfilUsuario>();
                //rptPerfilUsuario.DataSource = lista;
                //rptPerfilUsuario.DataBind();

                List<enOficina> loenOficina = new List<enOficina>();
                loenOficina = obtieneOficinasXzonas();
                rptZonas.DataSource = loenOficina;
                rptZonas.DataBind();

                List<enCargoPerfil> loenCargoPerfil = new List<enCargoPerfil>();
                loenCargoPerfil = obtienePerfilXCargo();
                rptCargo.DataSource = loenCargoPerfil;
                rptCargo.DataBind();

                //registros.Visible = true;
                buscarAD.Enabled = true;
                buscarAD.CssClass = "skip";
            }

            CargarEstado();
            //ListarPerfil(int.Parse(ddlCargo.SelectedValue));
        }
    }

    protected void buscarAD_Click(object sender, EventArgs e)
    {
        StringBuilder sb = new StringBuilder();
        oenUsuario = new enUsuario();
        ornUsuario = new rnUsuario();

        oenUsuario = BuscarUsuario(txtUsuario.Value);

        if (oenUsuario.NombreUsuario != null)
        {
            oenUsuario = ornUsuario.ObtenerUsuario(oenUsuario);
            if (oenUsuario.NombreUsuario != null)
            {
                sb.Append(@"<script language='javascript'>");
                sb.Append(@"$('#fu').removeClass('file-campos-oblig-sb').addClass('file-campos-oblig-cb');");
                sb.Append(@"$('#dvAlerta2').html('El usuario ya se encuentra registrado.');");
                sb.Append(@"$('#dvAlerta2').css('display', 'block');");
                sb.Append(@"$('#fijo').css('height', '50px');");
                sb.Append(@"</script>");
                ClientScript.RegisterStartupScript(this.GetType(), "JSScript", sb.ToString());
            }
            else
            {
                txtNombre.Value = oenUsuario.NombreCompleto;
                txtUsuario.Value = oenUsuario.NombreUsuario;

                //Cargar Oficina y Perfil Por Usuario
            }
        }
        else
        {
            sb.Append(@"<script language='javascript'>");
            sb.Append(@"$('#fu').removeClass('file-campos-oblig-sb').addClass('file-campos-oblig-cb');");
            sb.Append(@"$('#dvAlerta2').html('El usuario no se encuentra dentro del dominio.');");
            sb.Append(@"$('#dvAlerta2').css('display', 'block');");
            sb.Append(@"$('#fijo').css('height', '50px');");
            sb.Append(@"</script>");
            ClientScript.RegisterStartupScript(this.GetType(), "JSScript", sb.ToString());
        }
    }

    protected void btnGrabar_Click(object sender, EventArgs e)
    {
        //ornUsuario = new rnUsuario();
        //ornPerfilUsuario = new rnPerfilUsuario();
        //loenPerfilUsuario = (List<enPerfilUsuario>)Session["listaPerfilAsociar"];
        //if (codigo != string.Empty)
        //{
        //    //Usuario Asociado       
        //    foreach (var item in loenPerfilUsuario)
        //        oenPerfilUsuario.IdPerfil = item.IdPerfil;
        //    oenPerfilUsuario.IdUsuario = int.Parse(codigo);
        //    oenPerfilUsuario.CodigoTipoPerfil = 2;
        //    oenPerfilUsuario.IdCargo = int.Parse(ddlCargo.SelectedValue);
        //    oenPerfilUsuario.AudNombreUsuarioCreacion = utlAuditoria.ObtenerUsuarioDominio();
        //    oenPerfilUsuario.AudIPCreacion = utlAuditoria.ObtenerDireccionIP();
        //    oenPerfilUsuario.AudMacCreacion = utlAuditoria.ObtenerDireccionMAC();
        //    ornPerfilUsuario.Registrar(oenPerfilUsuario);
        //}
        //else
        //{
        //    //Asociar Usuario al sistema y asignarle un perfil
        //    oenUsuario = new enUsuario();
        //    oenUsuario.NombreCompleto = txtNombre.Value;
        //    oenUsuario.NombreUsuario = txtUsuario.Value;
        //    oenUsuario.IdCargo = 1;
        //    oenUsuario.CodigoEstadoUsuario = 1;
        //    ornUsuario.AsociarUsuario(oenUsuario, loenPerfilUsuario);
        //}
        //ScriptManager.RegisterStartupScript(this, GetType(), "RefreshScript", " window.parent.location.reload();", true);
    }

    protected void ddlCargo_SelectedIndexChanged(object sender, EventArgs e)
    {
        //ListarPerfil(int.Parse(ddlCargo.SelectedValue));
    }

    protected void rptPerfil_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            var item = e.Item.DataItem as enCargoPerfil;
            if (item != null)
            {
                var chk = e.Item.FindControl("chkPerfil") as CheckBox;
                if (chk != null)
                {
                    chk.InputAttributes.Add("Nombre", item.entPerfil.Nombre.ToString());
                    chk.InputAttributes.Add("IdPerfil", item.IdPerfil.ToString());
                }
            }
        }
    }

    protected void chkPerfilUsuario_CheckedChanged(object sender, EventArgs e)
    {
        //loenPerfilUsuario = new List<enPerfilUsuario>();
        //foreach (RepeaterItem rw in rptPerfilUsuario.Items)
        //{
        //    var chk = (CheckBox)rw.FindControl("chkPerfilUsuario");
        //    if (chk.Checked)
        //    {
        //        oenPerfilUsuario = new enPerfilUsuario();
        //        idPerfil = int.Parse((chk).InputAttributes["IdPerfilUsuario"]);
        //        oenPerfilUsuario.IdPerfil = idPerfil;
        //        oenPerfilUsuario.IdCargo = int.Parse(ddlCargo.SelectedValue);
        //        oenPerfilUsuario.CodigoTipoPerfil = 1;
        //        oenPerfilUsuario.AudNombreUsuarioCreacion = utlAuditoria.ObtenerUsuarioDominio();
        //        oenPerfilUsuario.AudIPCreacion = utlAuditoria.ObtenerDireccionIP();
        //        oenPerfilUsuario.AudMacCreacion = utlAuditoria.ObtenerDireccionMAC();
        //        loenPerfilUsuario.Add(oenPerfilUsuario);

        //        btnGrabar.Enabled = true;
        //        btnGrabar.CssClass = "skip";
        //    }
        //}
    }

    protected void rptPerfilUsuario_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            var item = e.Item.DataItem as enPerfilUsuario;
            if (item != null)
            {
                var chk = e.Item.FindControl("chkPerfilUsuario") as CheckBox;
                var fechaInicio = e.Item.FindControl("txtFechaInicio");

                //DropDownList DropDownID = (DropDownList)e.Item.FindControl("DropDownID");
                //int ItemNo = ((enPerfilUsuario)e.Item.DataItem).CodigoTipoPerfil;
                //DropDownID.Items[ItemNo].Selected = true;

                if (chk != null)
                    chk.InputAttributes.Add("IdPerfilUsuario", item.IdPerfil.ToString());
            }
        }
    }

    protected void btnAgregarPerfil_Click(object sender, EventArgs e)
    {
        //if (loenPerfilUsuario == null)
        //    loenPerfilUsuario = new List<enPerfilUsuario>();

        //loenPerfilUsuario = (List<enPerfilUsuario>)Session["listaPerfilAsociar"];


        //foreach (RepeaterItem item in rptPerfil.Items)
        //{
        //    var chk = (CheckBox)item.FindControl("chkPerfil");
        //    if (chk.Checked)
        //    {
        //        oenPerfilUsuario = new enPerfilUsuario();
        //        oenPerfilUsuario.entPerfil = new enPerfil();
        //        idPerfil = int.Parse(chk.InputAttributes["IdPerfil"]);
        //        var nombre = chk.InputAttributes["Nombre"];
        //        var FechaInicio = Convert.ToDateTime(chk.InputAttributes["FechaInicio"]);
        //        var FechaFin = Convert.ToDateTime(chk.InputAttributes["FechaFin"]);
        //        oenPerfilUsuario.IdPerfil = idPerfil;
        //        oenPerfilUsuario.IdCargo = int.Parse(ddlCargo.SelectedValue);
        //        oenPerfilUsuario.CodigoTipoPerfil = 1;
        //        oenPerfilUsuario.FechaInicio = FechaInicio;
        //        oenPerfilUsuario.FechaFin = FechaFin;
        //        oenPerfilUsuario.entPerfil.Nombre = nombre;
        //        oenPerfilUsuario.AudNombreUsuarioCreacion = utlAuditoria.ObtenerUsuarioDominio();
        //        oenPerfilUsuario.AudIPCreacion = utlAuditoria.ObtenerDireccionIP();
        //        oenPerfilUsuario.AudMacCreacion = utlAuditoria.ObtenerDireccionMAC();
        //        loenPerfilUsuario.Add(oenPerfilUsuario);
        //    }
        //}
        //registros.Visible = loenPerfilUsuario.Count == 0 ? true : false;
        //rptPerfilUsuario.DataSource = loenPerfilUsuario;
        //rptPerfilUsuario.DataBind();
    }

    #endregion
}
